ODYSEA Swath Simulator Examples¶

This notebook contains examples for constructing an ODYSEA orbital swath, co-locating model data, and adding expected instrument errors.

These simplified simulations are part of a much larger WaCM simulation capability at JPL, where the actual instrument, sampling, and science performance are generated.

Want to contrubite? Please do! Ask wineteer@jpl.nasa.gov how to get involved.

Imports and classes¶

In [1]:
%load_ext autoreload
%autoreload 2
In [1]:
from odysim.swath_sampling import OdyseaSwath
from odysim.errors import OdyseaErrors
from odysim.colocate_model import GriddedModel, addTimeDim
from odysim.utils import makePlot

import numpy as np
import scipy
import matplotlib
import matplotlib.pyplot as plt
import datetime
import itertools

font = {'weight' : 'bold',
        'size'   : 16}
matplotlib.rc('font', **font)

matplotlib.rc('font', **font)
matplotlib.rc('lines',linewidth=4)
matplotlib.rc('text',usetex=False)

matplotlib.rcParams.update({"axes.grid" : True, "grid.color": "black"})

Initialize the ODYSEA swath object¶

Orbit_fname contains an orbit propagated using the orbit height in the filename. config_fname most importantly contains the swath width to be used for swath generation. A swath is generated and centered on the propagated orbit nadir point.

In [3]:
odysea = OdyseaSwath(orbit_fname='../odysim/orbit_files/orbit_out_2020_2023_height590km.npz',
                     config_fname='../odysim/wacm_sampling_config.py')

Create an orbit generator object between two dates¶

Note that the provided orbit is currently 2020-2023 at 590 km height in a 4AM/PM sun-synchronous orbit.

In [4]:
start_time = datetime.datetime.strptime('2020-01-22:12','%Y-%M-%d:%H')
end_time = datetime.datetime.strptime('2020-01-25:12','%Y-%M-%d:%H')

orbits = odysea.getOrbits(start_time = start_time,end_time = end_time)

Grab the first xarray dataset orbit¶

The orbit iterator we created above contains all orbits that exist between the two chosen start/end dates. Actual orbital swath data is generated on the fly whenever next() is called. A for/while loop can also be used to iterate through each orbit inside the orbits iterator. Each orbit swath will be returned as an xarray dataset containing information about sample time/lat/lon and antenna pointing information.

In [5]:
%%time
o = next(orbits)
display(o)
<xarray.Dataset>
Dimensions:         (along_track: 8706, cross_track: 334)
Coordinates:
  * along_track     (along_track) int64 0 1 2 3 4 5 ... 8701 8702 8703 8704 8705
  * cross_track     (cross_track) int64 0 1 2 3 4 5 ... 328 329 330 331 332 333
Data variables:
    sample_time     (along_track, cross_track) datetime64[ns] 2020-01-22T20:3...
    lat             (along_track, cross_track) float32 -79.02 -79.05 ... -81.85
    lon             (along_track, cross_track) float32 1.74 1.567 ... 4.81 5.125
    swath_blanking  (cross_track) bool True True True True ... True True True
    encoder_fore    (along_track, cross_track) float64 -90.0 -83.72 ... 90.0
    encoder_aft     (along_track, cross_track) float64 -90.0 -96.28 ... 90.0
    azimuth_fore    (along_track, cross_track) float64 -90.0 -83.72 ... -46.51
    azimuth_aft     (along_track, cross_track) float64 -90.0 -96.28 ... -46.51
    bearing         (along_track) float64 9.095e-06 -83.34 ... -136.6 -136.5
Attributes: (12/14)
    title:                Odysea Simple Orbit Sampling V0.1
    project:              Odysea
    summary:              Simplified orbit sampling assuming basic Odysea orb...
    references:           Rodriguez 2018, Wineteer 2020
    institution:          Jet Propulsion Laboratory (JPL)
    creator_name:         Alexander Wineteer
    ...                   ...
    geospatial_lat_min:   -89.99N
    geospatial_lat_max:   89.99N
    geospatial_lon_min:   -180.00E
    geospatial_lon_max:   180.00E
    time_coverage_start:  2020-01-22 20:37:00.000878
    time_coverage_end:    2020-01-22 22:11:58.873014
xarray.Dataset
    • along_track: 8706
    • cross_track: 334
    • along_track
      (along_track)
      int64
      0 1 2 3 4 ... 8702 8703 8704 8705
      array([   0,    1,    2, ..., 8703, 8704, 8705])
    • cross_track
      (cross_track)
      int64
      0 1 2 3 4 5 ... 329 330 331 332 333
      array([  0,   1,   2, ..., 331, 332, 333])
    • sample_time
      (along_track, cross_track)
      datetime64[ns]
      2020-01-22T20:37:00 ... 2020-01-...
      long_name :
      Time of WaCM overpass.
      comments :
      Time of WaCM overpass in seconds since 1970.
      standard_name :
      time
      array([['2020-01-22T20:37:00.000000000', '2020-01-22T20:37:00.000000000',
              '2020-01-22T20:37:00.000000000', ...,
              '2020-01-22T20:37:00.000000000', '2020-01-22T20:37:00.000000000',
              '2020-01-22T20:37:00.000000000'],
             ['2020-01-22T20:37:00.000000000', '2020-01-22T20:37:00.000000000',
              '2020-01-22T20:37:00.000000000', ...,
              '2020-01-22T20:37:00.000000000', '2020-01-22T20:37:00.000000000',
              '2020-01-22T20:37:00.000000000'],
             ['2020-01-22T20:37:01.000000000', '2020-01-22T20:37:01.000000000',
              '2020-01-22T20:37:01.000000000', ...,
              '2020-01-22T20:37:01.000000000', '2020-01-22T20:37:01.000000000',
              '2020-01-22T20:37:01.000000000'],
             ...,
             ['2020-01-22T22:11:57.000000000', '2020-01-22T22:11:57.000000000',
              '2020-01-22T22:11:57.000000000', ...,
              '2020-01-22T22:11:57.000000000', '2020-01-22T22:11:57.000000000',
              '2020-01-22T22:11:57.000000000'],
             ['2020-01-22T22:11:58.000000000', '2020-01-22T22:11:58.000000000',
              '2020-01-22T22:11:58.000000000', ...,
              '2020-01-22T22:11:58.000000000', '2020-01-22T22:11:58.000000000',
              '2020-01-22T22:11:58.000000000'],
             ['2020-01-22T22:11:58.000000000', '2020-01-22T22:11:58.000000000',
              '2020-01-22T22:11:58.000000000', ...,
              '2020-01-22T22:11:58.000000000', '2020-01-22T22:11:58.000000000',
              '2020-01-22T22:11:58.000000000']], dtype='datetime64[ns]')
    • lat
      (along_track, cross_track)
      float32
      -79.02 -79.05 ... -81.84 -81.85
      valid_min :
      -90.0
      valid_max :
      90.0
      long_name :
      latitude
      standard_name :
      latitude
      units :
      degrees_north
      array([[-79.01565 , -79.045876, -79.07601 , ..., -79.10604 , -79.07601 ,
              -79.045876],
             [-74.66576 , -74.70992 , -74.754074, ..., -87.44197 , -87.446945,
              -87.45114 ],
             [-74.67244 , -74.71662 , -74.760796, ..., -87.48134 , -87.48638 ,
              -87.49064 ],
             ...,
             [-72.7047  , -72.74396 , -72.78319 , ..., -81.76231 , -81.76458 ,
              -81.76662 ],
             [-72.72445 , -72.763756, -72.80303 , ..., -81.801956, -81.80424 ,
              -81.806274],
             [-72.74413 , -72.78348 , -72.8228  , ..., -81.841606, -81.84389 ,
              -81.845924]], dtype=float32)
    • lon
      (along_track, cross_track)
      float32
      1.74 1.567 1.392 ... 4.81 5.125
      valid_min :
      -180.0
      valid_max :
      180.0
      long_name :
      longitude
      standard_name :
      longitude
      units :
      degrees_north
      array([[  1.7401661,   1.5665798,   1.3920463, ..., -83.87977  ,
              -84.05526  , -84.22979  ],
             [-50.558956 , -50.5305   , -50.50188  , ...,  23.246515 ,
               24.244295 ,  25.245665 ],
             [-50.713104 , -50.685066 , -50.65687  , ...,  23.13409  ,
               24.1473   ,  25.164265 ],
             ...,
             [-54.704178 , -54.631516 , -54.558533 , ...,   4.525809 ,
                4.837901 ,   5.150156 ],
             [-54.826176 , -54.7537   , -54.680904 , ...,   4.5102115,
                4.823802 ,   5.1375566],
             [-54.94845  , -54.876163 , -54.803555 , ...,   4.4945154,
                4.809619 ,   5.124888 ]], dtype=float32)
    • swath_blanking
      (cross_track)
      bool
      True True True ... True True True
      comment :
      Flagged in areas of the swath that are expected to have unacceptable error performance.
      array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True])
    • encoder_fore
      (along_track, cross_track)
      float64
      -90.0 -83.72 -81.11 ... 83.72 90.0
      array([[-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             ...,
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ]])
    • encoder_aft
      (along_track, cross_track)
      float64
      -90.0 -96.28 -98.89 ... 96.28 90.0
      array([[-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             ...,
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ]])
    • azimuth_fore
      (along_track, cross_track)
      float64
      -90.0 -83.72 ... -52.79 -46.51
      array([[ -89.9999909 ,  -83.71726497,  -81.1104118 , ...,   81.11042999,
                83.71728316,   90.0000091 ],
             [-173.33501094, -167.052285  , -164.44543183, ...,   -2.22459004,
                 0.38226312,    6.66498906],
             [ 161.88447549,  168.16720143,  170.77405459, ...,  -27.00510362,
               -24.39825045,  -18.11552451],
             ...,
             [ 133.22137041,  139.50409635,  142.11094951, ...,  -55.6682087 ,
               -53.06135553,  -46.77862959],
             [ 133.36359123,  139.64631717,  142.25317034, ...,  -55.52598787,
               -52.9191347 ,  -46.63640877],
             [ 133.49030592,  139.77303185,  142.37988502, ...,  -55.39927319,
               -52.79242002,  -46.50969408]])
    • azimuth_aft
      (along_track, cross_track)
      float64
      -90.0 -96.28 ... -40.23 -46.51
      array([[ -89.9999909 ,  -96.28271684,  -98.88957001, ...,   98.8895882 ,
                96.28273503,   90.0000091 ],
             [-173.33501094, -179.61773688,  177.77540996, ...,   15.55456817,
                12.947715  ,    6.66498906],
             [ 161.88447549,  155.60174955,  152.99489638, ...,   -9.22594541,
               -11.83279857,  -18.11552451],
             ...,
             [ 133.22137041,  126.93864447,  124.3317913 , ...,  -37.88905049,
               -40.49590365,  -46.77862959],
             [ 133.36359123,  127.0808653 ,  124.47401213, ...,  -37.74682966,
               -40.35368283,  -46.63640877],
             [ 133.49030592,  127.20757998,  124.60072681, ...,  -37.62011498,
               -40.22696815,  -46.50969408]])
    • bearing
      (along_track)
      float64
      9.095e-06 -83.34 ... -136.6 -136.5
      array([ 9.09516725e-06, -8.33350109e+01, -1.08115525e+02, ...,
             -1.36778630e+02, -1.36636409e+02, -1.36509694e+02])
    • along_track
      PandasIndex
      PandasIndex(Int64Index([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,
                  ...
                  8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, 8705],
                 dtype='int64', name='along_track', length=8706))
    • cross_track
      PandasIndex
      PandasIndex(Int64Index([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
                  ...
                  324, 325, 326, 327, 328, 329, 330, 331, 332, 333],
                 dtype='int64', name='cross_track', length=334))
  • title :
    Odysea Simple Orbit Sampling V0.1
    project :
    Odysea
    summary :
    Simplified orbit sampling assuming basic Odysea orbital parameters and viewing geometry. These data have been generated using only knowledge of along/cross track viewing geometry. No radar timing or antenna rotation was used.
    references :
    Rodriguez 2018, Wineteer 2020
    institution :
    Jet Propulsion Laboratory (JPL)
    creator_name :
    Alexander Wineteer
    version_id :
    0.1
    date_created :
    2022-12-23 12:41:13.535328
    geospatial_lat_min :
    -89.99N
    geospatial_lat_max :
    89.99N
    geospatial_lon_min :
    -180.00E
    geospatial_lon_max :
    180.00E
    time_coverage_start :
    2020-01-22 20:37:00.000878
    time_coverage_end :
    2020-01-22 22:11:58.873014
CPU times: user 14.1 s, sys: 117 ms, total: 14.2 s
Wall time: 14.3 s

Create a gridded model object to hold model data¶

The included GriddedModel class is designed to take in lat/lon gridded data and is used to interpolate to orbital swath data. Modify the GriddedModel class as neccessary to support your own model dataset. Much more documentation on how this work is in the GriddedModel code.

In [6]:
model = GriddedModel(preprocess=addTimeDim,n_files=200)
display(model.U)
<xarray.Dataset>
Dimensions:  (time: 200, lat: 4501, lon: 9000)
Coordinates:
  * time     (time) datetime64[ns] 2020-01-19T21:00:00 ... 2020-01-28T04:00:00
  * lat      (lat) float64 -90.0 -89.96 -89.92 -89.88 ... 89.88 89.92 89.96 90.0
  * lon      (lon) float64 -180.0 -180.0 -179.9 -179.9 ... 179.9 179.9 180.0
Data variables:
    U        (time, lat, lon) float64 dask.array<chunksize=(1, 4501, 9000), meta=np.ndarray>
xarray.Dataset
    • time: 200
    • lat: 4501
    • lon: 9000
    • time
      (time)
      datetime64[ns]
      2020-01-19T21:00:00 ... 2020-01-...
      array(['2020-01-19T21:00:00.000000000', '2020-01-19T22:00:00.000000000',
             '2020-01-19T23:00:00.000000000', '2020-01-20T00:00:00.000000000',
             '2020-01-20T01:00:00.000000000', '2020-01-20T02:00:00.000000000',
             '2020-01-20T03:00:00.000000000', '2020-01-20T04:00:00.000000000',
             '2020-01-20T05:00:00.000000000', '2020-01-20T06:00:00.000000000',
             '2020-01-20T07:00:00.000000000', '2020-01-20T08:00:00.000000000',
             '2020-01-20T09:00:00.000000000', '2020-01-20T10:00:00.000000000',
             '2020-01-20T11:00:00.000000000', '2020-01-20T12:00:00.000000000',
             '2020-01-20T13:00:00.000000000', '2020-01-20T14:00:00.000000000',
             '2020-01-20T15:00:00.000000000', '2020-01-20T16:00:00.000000000',
             '2020-01-20T17:00:00.000000000', '2020-01-20T18:00:00.000000000',
             '2020-01-20T19:00:00.000000000', '2020-01-20T20:00:00.000000000',
             '2020-01-20T21:00:00.000000000', '2020-01-20T22:00:00.000000000',
             '2020-01-20T23:00:00.000000000', '2020-01-21T00:00:00.000000000',
             '2020-01-21T01:00:00.000000000', '2020-01-21T02:00:00.000000000',
             '2020-01-21T03:00:00.000000000', '2020-01-21T04:00:00.000000000',
             '2020-01-21T05:00:00.000000000', '2020-01-21T06:00:00.000000000',
             '2020-01-21T07:00:00.000000000', '2020-01-21T08:00:00.000000000',
             '2020-01-21T09:00:00.000000000', '2020-01-21T10:00:00.000000000',
             '2020-01-21T11:00:00.000000000', '2020-01-21T12:00:00.000000000',
             '2020-01-21T13:00:00.000000000', '2020-01-21T14:00:00.000000000',
             '2020-01-21T15:00:00.000000000', '2020-01-21T16:00:00.000000000',
             '2020-01-21T17:00:00.000000000', '2020-01-21T18:00:00.000000000',
             '2020-01-21T19:00:00.000000000', '2020-01-21T20:00:00.000000000',
             '2020-01-21T21:00:00.000000000', '2020-01-21T22:00:00.000000000',
             '2020-01-21T23:00:00.000000000', '2020-01-22T00:00:00.000000000',
             '2020-01-22T01:00:00.000000000', '2020-01-22T02:00:00.000000000',
             '2020-01-22T03:00:00.000000000', '2020-01-22T04:00:00.000000000',
             '2020-01-22T05:00:00.000000000', '2020-01-22T06:00:00.000000000',
             '2020-01-22T07:00:00.000000000', '2020-01-22T08:00:00.000000000',
             '2020-01-22T09:00:00.000000000', '2020-01-22T10:00:00.000000000',
             '2020-01-22T11:00:00.000000000', '2020-01-22T12:00:00.000000000',
             '2020-01-22T13:00:00.000000000', '2020-01-22T14:00:00.000000000',
             '2020-01-22T15:00:00.000000000', '2020-01-22T16:00:00.000000000',
             '2020-01-22T17:00:00.000000000', '2020-01-22T18:00:00.000000000',
             '2020-01-22T19:00:00.000000000', '2020-01-22T20:00:00.000000000',
             '2020-01-22T21:00:00.000000000', '2020-01-22T22:00:00.000000000',
             '2020-01-22T23:00:00.000000000', '2020-01-23T00:00:00.000000000',
             '2020-01-23T01:00:00.000000000', '2020-01-23T02:00:00.000000000',
             '2020-01-23T03:00:00.000000000', '2020-01-23T04:00:00.000000000',
             '2020-01-23T05:00:00.000000000', '2020-01-23T06:00:00.000000000',
             '2020-01-23T07:00:00.000000000', '2020-01-23T08:00:00.000000000',
             '2020-01-23T09:00:00.000000000', '2020-01-23T10:00:00.000000000',
             '2020-01-23T11:00:00.000000000', '2020-01-23T12:00:00.000000000',
             '2020-01-23T13:00:00.000000000', '2020-01-23T14:00:00.000000000',
             '2020-01-23T15:00:00.000000000', '2020-01-23T16:00:00.000000000',
             '2020-01-23T17:00:00.000000000', '2020-01-23T18:00:00.000000000',
             '2020-01-23T19:00:00.000000000', '2020-01-23T20:00:00.000000000',
             '2020-01-23T21:00:00.000000000', '2020-01-23T22:00:00.000000000',
             '2020-01-23T23:00:00.000000000', '2020-01-24T00:00:00.000000000',
             '2020-01-24T01:00:00.000000000', '2020-01-24T02:00:00.000000000',
             '2020-01-24T03:00:00.000000000', '2020-01-24T04:00:00.000000000',
             '2020-01-24T05:00:00.000000000', '2020-01-24T06:00:00.000000000',
             '2020-01-24T07:00:00.000000000', '2020-01-24T08:00:00.000000000',
             '2020-01-24T09:00:00.000000000', '2020-01-24T10:00:00.000000000',
             '2020-01-24T11:00:00.000000000', '2020-01-24T12:00:00.000000000',
             '2020-01-24T13:00:00.000000000', '2020-01-24T14:00:00.000000000',
             '2020-01-24T15:00:00.000000000', '2020-01-24T16:00:00.000000000',
             '2020-01-24T17:00:00.000000000', '2020-01-24T18:00:00.000000000',
             '2020-01-24T19:00:00.000000000', '2020-01-24T20:00:00.000000000',
             '2020-01-24T21:00:00.000000000', '2020-01-24T22:00:00.000000000',
             '2020-01-24T23:00:00.000000000', '2020-01-25T00:00:00.000000000',
             '2020-01-25T01:00:00.000000000', '2020-01-25T02:00:00.000000000',
             '2020-01-25T03:00:00.000000000', '2020-01-25T04:00:00.000000000',
             '2020-01-25T05:00:00.000000000', '2020-01-25T06:00:00.000000000',
             '2020-01-25T07:00:00.000000000', '2020-01-25T08:00:00.000000000',
             '2020-01-25T09:00:00.000000000', '2020-01-25T10:00:00.000000000',
             '2020-01-25T11:00:00.000000000', '2020-01-25T12:00:00.000000000',
             '2020-01-25T13:00:00.000000000', '2020-01-25T14:00:00.000000000',
             '2020-01-25T15:00:00.000000000', '2020-01-25T16:00:00.000000000',
             '2020-01-25T17:00:00.000000000', '2020-01-25T18:00:00.000000000',
             '2020-01-25T19:00:00.000000000', '2020-01-25T20:00:00.000000000',
             '2020-01-25T21:00:00.000000000', '2020-01-25T22:00:00.000000000',
             '2020-01-25T23:00:00.000000000', '2020-01-26T00:00:00.000000000',
             '2020-01-26T01:00:00.000000000', '2020-01-26T02:00:00.000000000',
             '2020-01-26T03:00:00.000000000', '2020-01-26T04:00:00.000000000',
             '2020-01-26T05:00:00.000000000', '2020-01-26T06:00:00.000000000',
             '2020-01-26T07:00:00.000000000', '2020-01-26T08:00:00.000000000',
             '2020-01-26T09:00:00.000000000', '2020-01-26T10:00:00.000000000',
             '2020-01-26T11:00:00.000000000', '2020-01-26T12:00:00.000000000',
             '2020-01-26T13:00:00.000000000', '2020-01-26T14:00:00.000000000',
             '2020-01-26T15:00:00.000000000', '2020-01-26T16:00:00.000000000',
             '2020-01-26T17:00:00.000000000', '2020-01-26T18:00:00.000000000',
             '2020-01-26T19:00:00.000000000', '2020-01-26T20:00:00.000000000',
             '2020-01-26T21:00:00.000000000', '2020-01-26T22:00:00.000000000',
             '2020-01-26T23:00:00.000000000', '2020-01-27T00:00:00.000000000',
             '2020-01-27T01:00:00.000000000', '2020-01-27T02:00:00.000000000',
             '2020-01-27T03:00:00.000000000', '2020-01-27T04:00:00.000000000',
             '2020-01-27T05:00:00.000000000', '2020-01-27T06:00:00.000000000',
             '2020-01-27T07:00:00.000000000', '2020-01-27T08:00:00.000000000',
             '2020-01-27T09:00:00.000000000', '2020-01-27T10:00:00.000000000',
             '2020-01-27T11:00:00.000000000', '2020-01-27T12:00:00.000000000',
             '2020-01-27T13:00:00.000000000', '2020-01-27T14:00:00.000000000',
             '2020-01-27T15:00:00.000000000', '2020-01-27T16:00:00.000000000',
             '2020-01-27T17:00:00.000000000', '2020-01-27T18:00:00.000000000',
             '2020-01-27T19:00:00.000000000', '2020-01-27T20:00:00.000000000',
             '2020-01-27T21:00:00.000000000', '2020-01-27T22:00:00.000000000',
             '2020-01-27T23:00:00.000000000', '2020-01-28T00:00:00.000000000',
             '2020-01-28T01:00:00.000000000', '2020-01-28T02:00:00.000000000',
             '2020-01-28T03:00:00.000000000', '2020-01-28T04:00:00.000000000'],
            dtype='datetime64[ns]')
    • lat
      (lat)
      float64
      -90.0 -89.96 -89.92 ... 89.96 90.0
      array([-90.  , -89.96, -89.92, ...,  89.92,  89.96,  90.  ])
    • lon
      (lon)
      float64
      -180.0 -180.0 ... 179.9 180.0
      array([-180.  , -179.96, -179.92, ...,  179.88,  179.92,  179.96])
    • U
      (time, lat, lon)
      float64
      dask.array<chunksize=(1, 4501, 9000), meta=np.ndarray>
      Array Chunk
      Bytes 60.36 GiB 309.06 MiB
      Shape (200, 4501, 9000) (1, 4501, 9000)
      Dask graph 200 chunks in 801 graph layers
      Data type float64 numpy.ndarray
      9000 4501 200
    • time
      PandasIndex
      PandasIndex(DatetimeIndex(['2020-01-19 21:00:00', '2020-01-19 22:00:00',
                     '2020-01-19 23:00:00', '2020-01-20 00:00:00',
                     '2020-01-20 01:00:00', '2020-01-20 02:00:00',
                     '2020-01-20 03:00:00', '2020-01-20 04:00:00',
                     '2020-01-20 05:00:00', '2020-01-20 06:00:00',
                     ...
                     '2020-01-27 19:00:00', '2020-01-27 20:00:00',
                     '2020-01-27 21:00:00', '2020-01-27 22:00:00',
                     '2020-01-27 23:00:00', '2020-01-28 00:00:00',
                     '2020-01-28 01:00:00', '2020-01-28 02:00:00',
                     '2020-01-28 03:00:00', '2020-01-28 04:00:00'],
                    dtype='datetime64[ns]', name='time', length=200, freq=None))
    • lat
      PandasIndex
      PandasIndex(Float64Index([             -90.0,             -89.96, -89.91999999999999,
                    -89.87999999999998, -89.83999999999997, -89.79999999999997,
                    -89.75999999999996, -89.71999999999996, -89.67999999999995,
                    -89.63999999999994,
                    ...
                     89.64000000002807,  89.68000000002809,  89.72000000002811,
                      89.7600000000281,  89.80000000002809,  89.84000000002811,
                     89.88000000002813,  89.92000000002812,  89.96000000002812,
                     90.00000000002814],
                   dtype='float64', name='lat', length=4501))
    • lon
      PandasIndex
      PandasIndex(Float64Index([             -180.0,             -179.96, -179.92000000000002,
                    -179.88000000000002, -179.84000000000003, -179.80000000000004,
                    -179.76000000000005, -179.72000000000006, -179.68000000000006,
                    -179.64000000000007,
                    ...
                     179.59999999992846,  179.63999999992848,  179.67999999992844,
                      179.7199999999284,  179.75999999992843,  179.79999999992845,
                      179.8399999999284,  179.87999999992837,   179.9199999999284,
                      179.9599999999284],
                   dtype='float64', name='lon', length=9000))

Co-locate model currents and winds to the orbit swath¶

This code will add numerous wind and current variables into the orbit swath object. u_model, v_model, u10_model, v10_model, tx_model, ty_mode, wind_speed_model, wind_dir_model. Tx is wind stress. U10 is 10 meter wind. u is currents.

In [7]:
o = model.colocateSwathCurrents(o)
o = model.colocateSwathWinds(o)
display(o)
<xarray.Dataset>
Dimensions:           (along_track: 8706, cross_track: 334)
Coordinates:
  * along_track       (along_track) int64 0 1 2 3 4 ... 8701 8702 8703 8704 8705
  * cross_track       (cross_track) int64 0 1 2 3 4 5 ... 329 330 331 332 333
Data variables: (12/17)
    sample_time       (along_track, cross_track) datetime64[ns] 2020-01-22T20...
    lat               (along_track, cross_track) float32 -79.02 ... -81.85
    lon               (along_track, cross_track) float32 1.74 1.567 ... 5.125
    swath_blanking    (cross_track) bool True True True True ... True True True
    encoder_fore      (along_track, cross_track) float64 -90.0 -83.72 ... 90.0
    encoder_aft       (along_track, cross_track) float64 -90.0 -96.28 ... 90.0
    ...                ...
    u10_model         (along_track, cross_track) float64 nan nan nan ... nan nan
    v10_model         (along_track, cross_track) float64 nan nan nan ... nan nan
    tx_model          (along_track, cross_track) float64 nan nan nan ... nan nan
    ty_model          (along_track, cross_track) float64 nan nan nan ... nan nan
    wind_speed_model  (along_track, cross_track) float64 nan nan nan ... nan nan
    wind_dir_model    (along_track, cross_track) float64 nan nan nan ... nan nan
Attributes: (12/14)
    title:                Odysea Simple Orbit Sampling V0.1
    project:              Odysea
    summary:              Simplified orbit sampling assuming basic Odysea orb...
    references:           Rodriguez 2018, Wineteer 2020
    institution:          Jet Propulsion Laboratory (JPL)
    creator_name:         Alexander Wineteer
    ...                   ...
    geospatial_lat_min:   -89.99N
    geospatial_lat_max:   89.99N
    geospatial_lon_min:   -180.00E
    geospatial_lon_max:   180.00E
    time_coverage_start:  2020-01-22 20:37:00.000878
    time_coverage_end:    2020-01-22 22:11:58.873014
xarray.Dataset
    • along_track: 8706
    • cross_track: 334
    • along_track
      (along_track)
      int64
      0 1 2 3 4 ... 8702 8703 8704 8705
      array([   0,    1,    2, ..., 8703, 8704, 8705])
    • cross_track
      (cross_track)
      int64
      0 1 2 3 4 5 ... 329 330 331 332 333
      array([  0,   1,   2, ..., 331, 332, 333])
    • sample_time
      (along_track, cross_track)
      datetime64[ns]
      2020-01-22T20:37:00 ... 2020-01-...
      long_name :
      Time of WaCM overpass.
      comments :
      Time of WaCM overpass in seconds since 1970.
      standard_name :
      time
      array([['2020-01-22T20:37:00.000000000', '2020-01-22T20:37:00.000000000',
              '2020-01-22T20:37:00.000000000', ...,
              '2020-01-22T20:37:00.000000000', '2020-01-22T20:37:00.000000000',
              '2020-01-22T20:37:00.000000000'],
             ['2020-01-22T20:37:00.000000000', '2020-01-22T20:37:00.000000000',
              '2020-01-22T20:37:00.000000000', ...,
              '2020-01-22T20:37:00.000000000', '2020-01-22T20:37:00.000000000',
              '2020-01-22T20:37:00.000000000'],
             ['2020-01-22T20:37:01.000000000', '2020-01-22T20:37:01.000000000',
              '2020-01-22T20:37:01.000000000', ...,
              '2020-01-22T20:37:01.000000000', '2020-01-22T20:37:01.000000000',
              '2020-01-22T20:37:01.000000000'],
             ...,
             ['2020-01-22T22:11:57.000000000', '2020-01-22T22:11:57.000000000',
              '2020-01-22T22:11:57.000000000', ...,
              '2020-01-22T22:11:57.000000000', '2020-01-22T22:11:57.000000000',
              '2020-01-22T22:11:57.000000000'],
             ['2020-01-22T22:11:58.000000000', '2020-01-22T22:11:58.000000000',
              '2020-01-22T22:11:58.000000000', ...,
              '2020-01-22T22:11:58.000000000', '2020-01-22T22:11:58.000000000',
              '2020-01-22T22:11:58.000000000'],
             ['2020-01-22T22:11:58.000000000', '2020-01-22T22:11:58.000000000',
              '2020-01-22T22:11:58.000000000', ...,
              '2020-01-22T22:11:58.000000000', '2020-01-22T22:11:58.000000000',
              '2020-01-22T22:11:58.000000000']], dtype='datetime64[ns]')
    • lat
      (along_track, cross_track)
      float32
      -79.02 -79.05 ... -81.84 -81.85
      valid_min :
      -90.0
      valid_max :
      90.0
      long_name :
      latitude
      standard_name :
      latitude
      units :
      degrees_north
      array([[-79.01565 , -79.045876, -79.07601 , ..., -79.10604 , -79.07601 ,
              -79.045876],
             [-74.66576 , -74.70992 , -74.754074, ..., -87.44197 , -87.446945,
              -87.45114 ],
             [-74.67244 , -74.71662 , -74.760796, ..., -87.48134 , -87.48638 ,
              -87.49064 ],
             ...,
             [-72.7047  , -72.74396 , -72.78319 , ..., -81.76231 , -81.76458 ,
              -81.76662 ],
             [-72.72445 , -72.763756, -72.80303 , ..., -81.801956, -81.80424 ,
              -81.806274],
             [-72.74413 , -72.78348 , -72.8228  , ..., -81.841606, -81.84389 ,
              -81.845924]], dtype=float32)
    • lon
      (along_track, cross_track)
      float32
      1.74 1.567 1.392 ... 4.81 5.125
      valid_min :
      -180.0
      valid_max :
      180.0
      long_name :
      longitude
      standard_name :
      longitude
      units :
      degrees_north
      array([[  1.7401661,   1.5665798,   1.3920463, ..., -83.87977  ,
              -84.05526  , -84.22979  ],
             [-50.558956 , -50.5305   , -50.50188  , ...,  23.246515 ,
               24.244295 ,  25.245665 ],
             [-50.713104 , -50.685066 , -50.65687  , ...,  23.13409  ,
               24.1473   ,  25.164265 ],
             ...,
             [-54.704178 , -54.631516 , -54.558533 , ...,   4.525809 ,
                4.837901 ,   5.150156 ],
             [-54.826176 , -54.7537   , -54.680904 , ...,   4.5102115,
                4.823802 ,   5.1375566],
             [-54.94845  , -54.876163 , -54.803555 , ...,   4.4945154,
                4.809619 ,   5.124888 ]], dtype=float32)
    • swath_blanking
      (cross_track)
      bool
      True True True ... True True True
      comment :
      Flagged in areas of the swath that are expected to have unacceptable error performance.
      array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True])
    • encoder_fore
      (along_track, cross_track)
      float64
      -90.0 -83.72 -81.11 ... 83.72 90.0
      array([[-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             ...,
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ]])
    • encoder_aft
      (along_track, cross_track)
      float64
      -90.0 -96.28 -98.89 ... 96.28 90.0
      array([[-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             ...,
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ]])
    • azimuth_fore
      (along_track, cross_track)
      float64
      -90.0 -83.72 ... -52.79 -46.51
      array([[ -89.9999909 ,  -83.71726497,  -81.1104118 , ...,   81.11042999,
                83.71728316,   90.0000091 ],
             [-173.33501094, -167.052285  , -164.44543183, ...,   -2.22459004,
                 0.38226312,    6.66498906],
             [ 161.88447549,  168.16720143,  170.77405459, ...,  -27.00510362,
               -24.39825045,  -18.11552451],
             ...,
             [ 133.22137041,  139.50409635,  142.11094951, ...,  -55.6682087 ,
               -53.06135553,  -46.77862959],
             [ 133.36359123,  139.64631717,  142.25317034, ...,  -55.52598787,
               -52.9191347 ,  -46.63640877],
             [ 133.49030592,  139.77303185,  142.37988502, ...,  -55.39927319,
               -52.79242002,  -46.50969408]])
    • azimuth_aft
      (along_track, cross_track)
      float64
      -90.0 -96.28 ... -40.23 -46.51
      array([[ -89.9999909 ,  -96.28271684,  -98.88957001, ...,   98.8895882 ,
                96.28273503,   90.0000091 ],
             [-173.33501094, -179.61773688,  177.77540996, ...,   15.55456817,
                12.947715  ,    6.66498906],
             [ 161.88447549,  155.60174955,  152.99489638, ...,   -9.22594541,
               -11.83279857,  -18.11552451],
             ...,
             [ 133.22137041,  126.93864447,  124.3317913 , ...,  -37.88905049,
               -40.49590365,  -46.77862959],
             [ 133.36359123,  127.0808653 ,  124.47401213, ...,  -37.74682966,
               -40.35368283,  -46.63640877],
             [ 133.49030592,  127.20757998,  124.60072681, ...,  -37.62011498,
               -40.22696815,  -46.50969408]])
    • bearing
      (along_track)
      float64
      9.095e-06 -83.34 ... -136.6 -136.5
      array([ 9.09516725e-06, -8.33350109e+01, -1.08115525e+02, ...,
             -1.36778630e+02, -1.36636409e+02, -1.36509694e+02])
    • u_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.07458927, -0.07282154, -0.06813576, ...,         nan,
                      nan,         nan],
             [-0.07560322, -0.07546407, -0.06362789, ...,         nan,
                      nan,         nan],
             ...,
             [-0.02442188, -0.00147617, -0.01427912, ...,         nan,
                      nan,         nan],
             [-0.02163623,  0.01177538,  0.00107031, ...,         nan,
                      nan,         nan],
             [-0.01389071,  0.00935497, -0.01509025, ...,         nan,
                      nan,         nan]])
    • v_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.01951444, -0.01734036, -0.01828258, ...,         nan,
                      nan,         nan],
             [-0.01818529, -0.01644602, -0.02054819, ...,         nan,
                      nan,         nan],
             ...,
             [ 0.02337551,  0.01864014,  0.00944107, ...,         nan,
                      nan,         nan],
             [ 0.01689844,  0.01498296,  0.01619605, ...,         nan,
                      nan,         nan],
             [ 0.01226971,  0.01980597,  0.02179383, ...,         nan,
                      nan,         nan]])
    • u10_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-6.26194952, -6.27355882, -6.4205223 , ...,         nan,
                      nan,         nan],
             [-6.16040389, -6.15091743, -6.63316314, ...,         nan,
                      nan,         nan],
             ...,
             [-3.09849146, -4.76635914, -4.85316226, ...,         nan,
                      nan,         nan],
             [-3.08042508, -5.49261815, -5.45966231, ...,         nan,
                      nan,         nan],
             [-3.41575948, -5.26820086, -4.75852321, ...,         nan,
                      nan,         nan]])
    • v10_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.5668423 , -0.3601523 , -0.39840112, ...,         nan,
                      nan,         nan],
             [-0.50250601, -0.33186629, -0.13745283, ...,         nan,
                      nan,         nan],
             ...,
             [ 2.3286636 ,  2.06842426,  2.40312323, ...,         nan,
                      nan,         nan],
             [ 2.68404039,  2.2722928 ,  2.01507538, ...,         nan,
                      nan,         nan],
             [ 3.06167787,  2.22512838,  1.60822854, ...,         nan,
                      nan,         nan]])
    • tx_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.05379836, -0.05386669, -0.05643559, ...,         nan,
                      nan,         nan],
             [-0.0520279 , -0.05177127, -0.06013294, ...,         nan,
                      nan,         nan],
             ...,
             [-0.0164101 , -0.0338391 , -0.03591247, ...,         nan,
                      nan,         nan],
             [-0.01719717, -0.04461105, -0.04341514, ...,         nan,
                      nan,         nan],
             [-0.02140924, -0.0411669 , -0.0326594 , ...,         nan,
                      nan,         nan]])
    • ty_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.00486992, -0.00309238, -0.0035019 , ...,         nan,
                      nan,         nan],
             [-0.00424393, -0.00279326, -0.00124608, ...,         nan,
                      nan,         nan],
             ...,
             [ 0.01233297,  0.01468492,  0.01778265, ...,         nan,
                      nan,         nan],
             [ 0.01498426,  0.01845556,  0.01602385, ...,         nan,
                      nan,         nan],
             [ 0.01918993,  0.01738765,  0.01103783, ...,         nan,
                      nan,         nan]])
    • wind_speed_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[       nan,        nan,        nan, ...,        nan,        nan,
                     nan],
             [6.28755294, 6.28388812, 6.43287106, ...,        nan,        nan,
                     nan],
             [6.18086469, 6.15986367, 6.63458714, ...,        nan,        nan,
                     nan],
             ...,
             [3.87599323, 5.19582124, 5.41555031, ...,        nan,        nan,
                     nan],
             [4.08571799, 5.94408687, 5.8196599 , ...,        nan,        nan,
                     nan],
             [4.58707796, 5.71884049, 5.02294158, ...,        nan,        nan,
                     nan]])
    • wind_dir_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[         nan,          nan,          nan, ...,          nan,
                       nan,          nan],
             [-95.17241405, -93.28562827, -93.55071941, ...,          nan,
                       nan,          nan],
             [-94.66330955, -93.08833919, -91.18711691, ...,          nan,
                       nan,          nan],
             ...,
             [-53.07339768, -66.54093289, -63.6569295 , ...,          nan,
                       nan,          nan],
             [-48.93366474, -67.52515001, -69.74169052, ...,          nan,
                       nan,          nan],
             [-48.12889335, -67.10227765, -71.3263926 , ...,          nan,
                       nan,          nan]])
    • along_track
      PandasIndex
      PandasIndex(Int64Index([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,
                  ...
                  8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, 8705],
                 dtype='int64', name='along_track', length=8706))
    • cross_track
      PandasIndex
      PandasIndex(Int64Index([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
                  ...
                  324, 325, 326, 327, 328, 329, 330, 331, 332, 333],
                 dtype='int64', name='cross_track', length=334))
  • title :
    Odysea Simple Orbit Sampling V0.1
    project :
    Odysea
    summary :
    Simplified orbit sampling assuming basic Odysea orbital parameters and viewing geometry. These data have been generated using only knowledge of along/cross track viewing geometry. No radar timing or antenna rotation was used.
    references :
    Rodriguez 2018, Wineteer 2020
    institution :
    Jet Propulsion Laboratory (JPL)
    creator_name :
    Alexander Wineteer
    version_id :
    0.1
    date_created :
    2022-12-23 12:41:13.535328
    geospatial_lat_min :
    -89.99N
    geospatial_lat_max :
    89.99N
    geospatial_lon_min :
    -180.00E
    geospatial_lon_max :
    180.00E
    time_coverage_start :
    2020-01-22 20:37:00.000878
    time_coverage_end :
    2020-01-22 22:11:58.873014

Look at these model data in the swath¶

In [10]:
o.u_model.T.plot(figsize=(20,2),vmax=1,vmin=-1,cmap='RdBu_r')
o.v_model.T.plot(figsize=(20,2),vmax=1,vmin=-1,cmap='RdBu_r')
o.wind_speed_model.T.plot(figsize=(20,2))
Out[10]:
<matplotlib.collections.QuadMesh at 0x7fab8816bb10>

Look at these data on a geographic map¶

In [12]:
lons = []
lats = []
var_to_plot = []

# stack up some data from 2 orbits
for o in itertools.islice(orbits, 2):    

    o = model.colocateSwathCurrents(o)

    lons = np.append(lons,o.lon)
    lats = np.append(lats,o.lat)
    var_to_plot = np.append(var_to_plot,o.u_model)


# make a map with utils.makePlot(); this will grid data for us.
makePlot(lons,lats,var_to_plot,vmin=-1,vmax=1,cblabel='Latitude [deg]',colormap='RdBu_r',figsize=(20,10),bg=True,gridMe=True)

Initialize an OdyseaErrors class that will do uncertainty estimation.¶

In [15]:
e = OdyseaErrors()

Set surface current uncertainties (radial and geographic) using a simple constant wind speed error model.¶

This will set all expected standard deviations and resulting uncertainties. Using simulated_baseline will generate uncertainties that are a function of cross-track location and wind speed. If winds have been co-located to the swath from a model, those wind speeds and directions will be used to generate the error field, otherwise, a constant wind speed/dir will be used from the function arguments.

In [16]:
o = next(orbits)
o = e.setCurrentErrors(o,etype='simulated_baseline',wind_speed=7,wind_dir=0)
display(o)
Using wind speed from function args. Assign "wind_speed" and "wind_dir" variables to orbit dataset if desired.
<xarray.Dataset>
Dimensions:         (along_track: 8706, cross_track: 334)
Coordinates:
  * along_track     (along_track) int64 0 1 2 3 4 5 ... 8701 8702 8703 8704 8705
  * cross_track     (cross_track) int64 0 1 2 3 4 5 ... 328 329 330 331 332 333
Data variables: (12/17)
    sample_time     (along_track, cross_track) datetime64[ns] 2020-01-23T03:0...
    lat             (along_track, cross_track) float32 -78.95 -78.98 ... -81.58
    lon             (along_track, cross_track) float32 -93.55 -93.72 ... -91.58
    swath_blanking  (cross_track) bool True True True True ... True True True
    encoder_fore    (along_track, cross_track) float64 -90.0 -83.72 ... 90.0
    encoder_aft     (along_track, cross_track) float64 -90.0 -96.28 ... 90.0
    ...              ...
    vx_std          (along_track, cross_track) float64 1.001e+15 ... 1.815e+15
    vy_std          (along_track, cross_track) float64 -0.06128 ... 0.1111
    u_std           (along_track, cross_track) float64 1.478e+08 ... 1.229e+15
    v_std           (along_track, cross_track) float64 1.001e+15 ... 1.336e+15
    u_error         (along_track, cross_track) float64 -1.081e+08 ... 3.766e+13
    v_error         (along_track, cross_track) float64 1.966e+14 ... -1.467e+15
Attributes: (12/14)
    title:                Odysea Simple Orbit Sampling V0.1
    project:              Odysea
    summary:              Simplified orbit sampling assuming basic Odysea orb...
    references:           Rodriguez 2018, Wineteer 2020
    institution:          Jet Propulsion Laboratory (JPL)
    creator_name:         Alexander Wineteer
    ...                   ...
    geospatial_lat_min:   -89.99N
    geospatial_lat_max:   89.99N
    geospatial_lon_min:   -180.00E
    geospatial_lon_max:   180.00E
    time_coverage_start:  2020-01-23 03:02:59.999735
    time_coverage_end:    2020-01-23 04:37:58.873391
xarray.Dataset
    • along_track: 8706
    • cross_track: 334
    • along_track
      (along_track)
      int64
      0 1 2 3 4 ... 8702 8703 8704 8705
      array([   0,    1,    2, ..., 8703, 8704, 8705])
    • cross_track
      (cross_track)
      int64
      0 1 2 3 4 5 ... 329 330 331 332 333
      array([  0,   1,   2, ..., 331, 332, 333])
    • sample_time
      (along_track, cross_track)
      datetime64[ns]
      2020-01-23T03:02:59 ... 2020-01-...
      long_name :
      Time of WaCM overpass.
      comments :
      Time of WaCM overpass in seconds since 1970.
      standard_name :
      time
      array([['2020-01-23T03:02:59.000000000', '2020-01-23T03:02:59.000000000',
              '2020-01-23T03:02:59.000000000', ...,
              '2020-01-23T03:02:59.000000000', '2020-01-23T03:02:59.000000000',
              '2020-01-23T03:02:59.000000000'],
             ['2020-01-23T03:03:00.000000000', '2020-01-23T03:03:00.000000000',
              '2020-01-23T03:03:00.000000000', ...,
              '2020-01-23T03:03:00.000000000', '2020-01-23T03:03:00.000000000',
              '2020-01-23T03:03:00.000000000'],
             ['2020-01-23T03:03:01.000000000', '2020-01-23T03:03:01.000000000',
              '2020-01-23T03:03:01.000000000', ...,
              '2020-01-23T03:03:01.000000000', '2020-01-23T03:03:01.000000000',
              '2020-01-23T03:03:01.000000000'],
             ...,
             ['2020-01-23T04:37:57.000000000', '2020-01-23T04:37:57.000000000',
              '2020-01-23T04:37:57.000000000', ...,
              '2020-01-23T04:37:57.000000000', '2020-01-23T04:37:57.000000000',
              '2020-01-23T04:37:57.000000000'],
             ['2020-01-23T04:37:58.000000000', '2020-01-23T04:37:58.000000000',
              '2020-01-23T04:37:58.000000000', ...,
              '2020-01-23T04:37:58.000000000', '2020-01-23T04:37:58.000000000',
              '2020-01-23T04:37:58.000000000'],
             ['2020-01-23T04:37:58.000000000', '2020-01-23T04:37:58.000000000',
              '2020-01-23T04:37:58.000000000', ...,
              '2020-01-23T04:37:58.000000000', '2020-01-23T04:37:58.000000000',
              '2020-01-23T04:37:58.000000000']], dtype='datetime64[ns]')
    • lat
      (along_track, cross_track)
      float32
      -78.95 -78.98 ... -81.58 -81.58
      valid_min :
      -90.0
      valid_max :
      90.0
      long_name :
      latitude
      standard_name :
      latitude
      units :
      degrees_north
      array([[-78.950066, -78.98011 , -79.010056, ..., -79.0399  , -79.010056,
              -78.98011 ],
             [-74.61875 , -74.66278 , -74.7068  , ..., -87.18079 , -87.18534 ,
              -87.189186],
             [-74.62613 , -74.67018 , -74.714226, ..., -87.2202  , -87.22481 ,
              -87.22871 ],
             ...,
             [-72.571815, -72.61078 , -72.64973 , ..., -81.49936 , -81.50162 ,
              -81.50365 ],
             [-72.59205 , -72.631065, -72.67005 , ..., -81.53902 , -81.541275,
              -81.543304],
             [-72.61221 , -72.65127 , -72.6903  , ..., -81.57867 , -81.58093 ,
              -81.58296 ]], dtype=float32)
    • lon
      (along_track, cross_track)
      float32
      -93.55 -93.72 ... -91.88 -91.58
      valid_min :
      -180.0
      valid_max :
      180.0
      long_name :
      longitude
      standard_name :
      longitude
      units :
      degrees_north
      array([[ -93.54598 ,  -93.71942 ,  -93.8938  , ..., -178.54013 ,
              -178.71544 , -178.88982 ],
             [-146.32289 , -146.29167 , -146.26028 , ...,  -72.86738 ,
               -71.9612  ,  -71.05231 ],
             [-146.47615 , -146.44536 , -146.41438 , ...,  -72.96076 ,
               -72.04185 ,  -71.12012 ],
             ...,
             [-150.68478 , -150.61092 , -150.53673 , ...,  -92.15616 ,
               -91.853645,  -91.55098 ],
             [-150.80498 , -150.7313  , -150.65729 , ...,  -92.171135,
               -91.86722 ,  -91.56315 ],
             [-150.92545 , -150.85194 , -150.7781  , ...,  -92.1862  ,
               -91.88087 ,  -91.57537 ]], dtype=float32)
    • swath_blanking
      (cross_track)
      bool
      True True True ... True True True
      comment :
      Flagged in areas of the swath that are expected to have unacceptable error performance.
      array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True])
    • encoder_fore
      (along_track, cross_track)
      float64
      -90.0 -83.72 -81.11 ... 83.72 90.0
      array([[-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             ...,
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ]])
    • encoder_aft
      (along_track, cross_track)
      float64
      -90.0 -96.28 -98.89 ... 96.28 90.0
      array([[-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             ...,
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ]])
    • azimuth_fore
      (along_track, cross_track)
      float64
      -90.0 -83.72 ... -53.66 -47.38
      array([[ -89.99999154,  -83.7172656 ,  -81.11041244, ...,   81.11042935,
                83.71728252,   90.00000846],
             [-174.51454965, -168.23182371, -165.62497055, ...,   -3.40412876,
                -0.79727559,    5.48545035],
             [ 160.11582892,  166.39855486,  169.00540802, ...,  -28.77375019,
               -26.16689702,  -19.88417108],
             ...,
             [ 132.3635583 ,  138.64628424,  141.25313741, ...,  -56.5260208 ,
               -53.91916764,  -47.6364417 ],
             [ 132.46575984,  138.74848578,  141.35533895, ...,  -56.42381926,
               -53.8169661 ,  -47.53424016],
             [ 132.61820778,  138.90093372,  141.50778688, ...,  -56.27137133,
               -53.66451816,  -47.38179222]])
    • azimuth_aft
      (along_track, cross_track)
      float64
      -90.0 -96.28 ... -41.1 -47.38
      array([[ -89.99999154,  -96.28271748,  -98.88957065, ...,   98.88958756,
                96.2827344 ,   90.00000846],
             [-174.51454965,  179.20272441,  176.59587124, ...,   14.37502945,
                11.76817629,    5.48545035],
             [ 160.11582892,  153.83310298,  151.22624981, ...,  -10.99459198,
               -13.60144514,  -19.88417108],
             ...,
             [ 132.3635583 ,  126.08083236,  123.4739792 , ...,  -38.74686259,
               -41.35371576,  -47.6364417 ],
             [ 132.46575984,  126.1830339 ,  123.57618074, ...,  -38.64466105,
               -41.25151422,  -47.53424016],
             [ 132.61820778,  126.33548184,  123.72862867, ...,  -38.49221312,
               -41.09906628,  -47.38179222]])
    • bearing
      (along_track)
      float64
      8.459e-06 -84.51 ... -137.5 -137.4
      array([ 8.45933756e-06, -8.45145497e+01, -1.09884171e+02, ...,
             -1.37636442e+02, -1.37534240e+02, -1.37381792e+02])
    • vr_std_fore
      (along_track, cross_track)
      float64
      0.08666 0.1023 ... 0.1488 0.1572
      array([[0.08666068, 0.10225497, 0.11078952, ..., 0.1107895 , 0.10225496,
              0.08666068],
             [0.24485063, 0.23959355, 0.23086381, ..., 0.29833411, 0.28981551,
              0.24485063],
             [0.23646254, 0.28958528, 0.30308677, ..., 0.22002713, 0.22791398,
              0.23646254],
             ...,
             [0.1565325 , 0.21933754, 0.24896612, ..., 0.14645194, 0.14833894,
              0.1565325 ],
             [0.15679139, 0.21969149, 0.24933224, ..., 0.14660521, 0.14854336,
              0.15679139],
             [0.15717757, 0.22021947, 0.24987835, ..., 0.14683382, 0.14884828,
              0.15717757]])
    • vr_std_aft
      (along_track, cross_track)
      float64
      0.08666 0.1023 ... 0.2202 0.1572
      array([[0.08666068, 0.10225496, 0.1107895 , ..., 0.11078952, 0.10225497,
              0.08666068],
             [0.24485063, 0.28981551, 0.29833411, ..., 0.23086381, 0.23959355,
              0.24485063],
             [0.23646254, 0.22791398, 0.22002713, ..., 0.30308677, 0.28958528,
              0.23646254],
             ...,
             [0.1565325 , 0.14833894, 0.14645194, ..., 0.24896612, 0.21933754,
              0.1565325 ],
             [0.15679139, 0.14854336, 0.14660521, ..., 0.24933224, 0.21969149,
              0.15679139],
             [0.15717757, 0.14884828, 0.14683382, ..., 0.24987835, 0.22021947,
              0.15717757]])
    • vx_std
      (along_track, cross_track)
      float64
      1.001e+15 -0.6607 ... 1.815e+15
      array([[ 1.00075153e+15, -6.60715644e-01, -5.06954386e-01, ...,
              -5.06954386e-01, -6.60715644e-01,  1.00075153e+15],
             [ 2.82751793e+15, -1.71805470e+00, -1.22056172e+00, ...,
              -1.22056172e+00, -1.71805470e+00,  2.82751793e+15],
             [ 2.73065283e+15, -1.68372883e+00, -1.21183393e+00, ...,
              -1.21183393e+00, -1.68372883e+00,  2.73065283e+15],
             ...,
             [ 1.80762632e+15, -1.20980592e+00, -9.34592638e-01, ...,
              -9.34592638e-01, -1.20980592e+00,  1.80762632e+15],
             [ 1.81061600e+15, -1.21166877e+00, -9.35865143e-01, ...,
              -9.35865143e-01, -1.21166877e+00,  1.81061600e+15],
             [ 1.81507553e+15, -1.21444749e+00, -9.37763320e-01, ...,
              -9.37763320e-01, -1.21444749e+00,  1.81507553e+15]])
    • vy_std
      (along_track, cross_track)
      float64
      -0.06128 -0.07274 ... 0.1337 0.1111
      array([[-0.06127836, -0.07274207, -0.07929248, ...,  0.07929248,
               0.07274207,  0.06127836],
             [-0.17313554, -0.18915073, -0.19090743, ...,  0.19090743,
               0.18915073,  0.17313554],
             [-0.16720426, -0.1853716 , -0.18954232, ...,  0.18954232,
               0.1853716 ,  0.16720426],
             ...,
             [-0.11068519, -0.13319464, -0.14617916, ...,  0.14617916,
               0.13319464,  0.11068519],
             [-0.11086825, -0.13339973, -0.14637819, ...,  0.14637819,
               0.13339973,  0.11086825],
             [-0.11114132, -0.13370566, -0.14667508, ...,  0.14667508,
               0.13370566,  0.11114132]])
    • u_std
      (along_track, cross_track)
      float64
      1.478e+08 0.07274 ... 1.229e+15
      array([[1.47754251e+08, 7.27420663e-02, 7.92924756e-02, ...,
              7.92924756e-02, 7.27420663e-02, 1.47754251e+08],
             [2.81456933e+15, 1.71028246e+00, 1.21510922e+00, ...,
              1.21510922e+00, 1.71028246e+00, 2.81456933e+15],
             [2.56785712e+15, 1.58460329e+00, 1.14140898e+00, ...,
              1.14140898e+00, 1.58460329e+00, 2.56785712e+15],
             ...,
             [1.21803749e+15, 8.21125725e-01, 6.38954139e-01, ...,
              6.38954139e-01, 8.21125725e-01, 1.21803749e+15],
             [1.22243647e+15, 8.23955083e-01, 6.41009175e-01, ...,
              6.41009175e-01, 8.23955083e-01, 1.22243647e+15],
             [1.22900553e+15, 8.28179822e-01, 6.44077202e-01, ...,
              6.44077202e-01, 8.28179822e-01, 1.22900553e+15]])
    • v_std
      (along_track, cross_track)
      float64
      1.001e+15 0.6607 ... 1.336e+15
      array([[1.00075153e+15, 6.60715644e-01, 5.06954386e-01, ...,
              5.06954386e-01, 6.60715644e-01, 1.00075153e+15],
             [2.70290863e+14, 2.49847666e-01, 2.22993632e-01, ...,
              2.22993632e-01, 2.49847666e-01, 2.70290863e+14],
             [9.28749005e+14, 5.98613244e-01, 4.49058239e-01, ...,
              4.49058239e-01, 5.98613244e-01, 9.28749005e+14],
             ...,
             [1.33562629e+15, 8.98400653e-01, 6.97545234e-01, ...,
              6.97545234e-01, 8.98400653e-01, 1.33562629e+15],
             [1.33565691e+15, 8.98351108e-01, 6.97407611e-01, ...,
              6.97407611e-01, 8.98351108e-01, 1.33565691e+15],
             [1.33568132e+15, 8.98263929e-01, 6.97193073e-01, ...,
              6.97193073e-01, 8.98263929e-01, 1.33568132e+15]])
    • u_error
      (along_track, cross_track)
      float64
      -1.081e+08 0.00572 ... 3.766e+13
      array([[-1.08102160e+08,  5.72027123e-03,  5.45920520e-02, ...,
              -6.60355847e-02,  4.69527727e-02,  1.16090488e+08],
             [ 4.91610996e+15, -8.16507014e-01,  5.69959000e-02, ...,
               2.70823993e-01,  1.26449056e-01,  5.01785459e+15],
             [-1.01952503e+15,  1.13229781e+00,  1.66042314e+00, ...,
              -1.38394261e+00, -2.42730044e+00, -2.28261774e+15],
             ...,
             [ 2.52638237e+15,  7.31336606e-01, -7.00775210e-02, ...,
              -4.07449019e-01, -8.70818473e-01,  1.44413896e+15],
             [-3.48236502e+13,  6.26293472e-01, -6.94116236e-02, ...,
              -3.53511814e-01,  1.70921715e+00, -1.33054204e+15],
             [ 1.25018578e+15,  3.71438828e-02, -2.50547699e-01, ...,
              -5.52521802e-01,  8.14157534e-01,  3.76596591e+13]])
    • v_error
      (along_track, cross_track)
      float64
      1.966e+14 -0.2695 ... -1.467e+15
      array([[ 1.96629105e+14, -2.69511330e-01, -2.63498675e-01, ...,
              -3.75211058e-01,  1.02575934e-01,  7.82374605e+14],
             [ 2.19249065e+14,  1.78243218e-01, -2.61402878e-01, ...,
               2.10564806e-01,  3.23267016e-02,  5.45234715e+14],
             [ 3.48468568e+14,  4.21451891e-01, -9.54414739e-01, ...,
               1.73610316e+00, -1.78503750e-01, -2.56628210e+14],
             ...,
             [ 1.71121600e+15, -1.25983298e+00, -9.13935994e-01, ...,
              -1.39005047e+00,  1.79333835e-01, -3.72836720e+15],
             [-5.22106367e+14, -2.19283655e+00, -2.36203671e-02, ...,
               4.75062835e-01, -1.26241429e+00, -3.34095140e+14],
             [ 2.91699223e+15, -1.10815489e+00,  6.28401198e-01, ...,
              -9.91283718e-02,  5.74151647e-01, -1.46683782e+15]])
    • along_track
      PandasIndex
      PandasIndex(Int64Index([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,
                  ...
                  8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, 8705],
                 dtype='int64', name='along_track', length=8706))
    • cross_track
      PandasIndex
      PandasIndex(Int64Index([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
                  ...
                  324, 325, 326, 327, 328, 329, 330, 331, 332, 333],
                 dtype='int64', name='cross_track', length=334))
  • title :
    Odysea Simple Orbit Sampling V0.1
    project :
    Odysea
    summary :
    Simplified orbit sampling assuming basic Odysea orbital parameters and viewing geometry. These data have been generated using only knowledge of along/cross track viewing geometry. No radar timing or antenna rotation was used.
    references :
    Rodriguez 2018, Wineteer 2020
    institution :
    Jet Propulsion Laboratory (JPL)
    creator_name :
    Alexander Wineteer
    version_id :
    0.1
    date_created :
    2022-12-22 17:38:25.632790
    geospatial_lat_min :
    -89.99N
    geospatial_lat_max :
    89.99N
    geospatial_lon_min :
    -180.00E
    geospatial_lon_max :
    180.00E
    time_coverage_start :
    2020-01-23 03:02:59.999735
    time_coverage_end :
    2020-01-23 04:37:58.873391

Show the geographic u/v surface current uncertainties.¶

In [19]:
o.u_error.T.plot(figsize=(20,2),vmax=.5)
o.v_error.T.plot(figsize=(20,2),vmax=.5)
Out[19]:
<matplotlib.collections.QuadMesh at 0x7f344463b750>

Repeat the error estimation, but this time, co-locate model winds to the swath and use them during uncertainty estimation.¶

In [21]:
o = model.colocateSwathCurrents(o)
o = model.colocateSwathWinds(o)

o = e.setCurrentErrors(o,etype='simulated_baseline',wind_speed=7,wind_dir=0)
display(o)
<xarray.Dataset>
Dimensions:           (along_track: 8706, cross_track: 334)
Coordinates:
  * along_track       (along_track) int64 0 1 2 3 4 ... 8701 8702 8703 8704 8705
  * cross_track       (cross_track) int64 0 1 2 3 4 5 ... 329 330 331 332 333
Data variables: (12/25)
    sample_time       (along_track, cross_track) datetime64[ns] 2020-01-23T03...
    lat               (along_track, cross_track) float32 -78.95 ... -81.58
    lon               (along_track, cross_track) float32 -93.55 ... -91.58
    swath_blanking    (cross_track) bool True True True True ... True True True
    encoder_fore      (along_track, cross_track) float64 -90.0 -83.72 ... 90.0
    encoder_aft       (along_track, cross_track) float64 -90.0 -96.28 ... 90.0
    ...                ...
    u10_model         (along_track, cross_track) float64 nan nan nan ... nan nan
    v10_model         (along_track, cross_track) float64 nan nan nan ... nan nan
    tx_model          (along_track, cross_track) float64 nan nan nan ... nan nan
    ty_model          (along_track, cross_track) float64 nan nan nan ... nan nan
    wind_speed_model  (along_track, cross_track) float64 nan nan nan ... nan nan
    wind_dir_model    (along_track, cross_track) float64 nan nan nan ... nan nan
Attributes: (12/14)
    title:                Odysea Simple Orbit Sampling V0.1
    project:              Odysea
    summary:              Simplified orbit sampling assuming basic Odysea orb...
    references:           Rodriguez 2018, Wineteer 2020
    institution:          Jet Propulsion Laboratory (JPL)
    creator_name:         Alexander Wineteer
    ...                   ...
    geospatial_lat_min:   -89.99N
    geospatial_lat_max:   89.99N
    geospatial_lon_min:   -180.00E
    geospatial_lon_max:   180.00E
    time_coverage_start:  2020-01-23 03:02:59.999735
    time_coverage_end:    2020-01-23 04:37:58.873391
xarray.Dataset
    • along_track: 8706
    • cross_track: 334
    • along_track
      (along_track)
      int64
      0 1 2 3 4 ... 8702 8703 8704 8705
      array([   0,    1,    2, ..., 8703, 8704, 8705])
    • cross_track
      (cross_track)
      int64
      0 1 2 3 4 5 ... 329 330 331 332 333
      array([  0,   1,   2, ..., 331, 332, 333])
    • sample_time
      (along_track, cross_track)
      datetime64[ns]
      2020-01-23T03:02:59 ... 2020-01-...
      long_name :
      Time of WaCM overpass.
      comments :
      Time of WaCM overpass in seconds since 1970.
      standard_name :
      time
      array([['2020-01-23T03:02:59.000000000', '2020-01-23T03:02:59.000000000',
              '2020-01-23T03:02:59.000000000', ...,
              '2020-01-23T03:02:59.000000000', '2020-01-23T03:02:59.000000000',
              '2020-01-23T03:02:59.000000000'],
             ['2020-01-23T03:03:00.000000000', '2020-01-23T03:03:00.000000000',
              '2020-01-23T03:03:00.000000000', ...,
              '2020-01-23T03:03:00.000000000', '2020-01-23T03:03:00.000000000',
              '2020-01-23T03:03:00.000000000'],
             ['2020-01-23T03:03:01.000000000', '2020-01-23T03:03:01.000000000',
              '2020-01-23T03:03:01.000000000', ...,
              '2020-01-23T03:03:01.000000000', '2020-01-23T03:03:01.000000000',
              '2020-01-23T03:03:01.000000000'],
             ...,
             ['2020-01-23T04:37:57.000000000', '2020-01-23T04:37:57.000000000',
              '2020-01-23T04:37:57.000000000', ...,
              '2020-01-23T04:37:57.000000000', '2020-01-23T04:37:57.000000000',
              '2020-01-23T04:37:57.000000000'],
             ['2020-01-23T04:37:58.000000000', '2020-01-23T04:37:58.000000000',
              '2020-01-23T04:37:58.000000000', ...,
              '2020-01-23T04:37:58.000000000', '2020-01-23T04:37:58.000000000',
              '2020-01-23T04:37:58.000000000'],
             ['2020-01-23T04:37:58.000000000', '2020-01-23T04:37:58.000000000',
              '2020-01-23T04:37:58.000000000', ...,
              '2020-01-23T04:37:58.000000000', '2020-01-23T04:37:58.000000000',
              '2020-01-23T04:37:58.000000000']], dtype='datetime64[ns]')
    • lat
      (along_track, cross_track)
      float32
      -78.95 -78.98 ... -81.58 -81.58
      valid_min :
      -90.0
      valid_max :
      90.0
      long_name :
      latitude
      standard_name :
      latitude
      units :
      degrees_north
      array([[-78.950066, -78.98011 , -79.010056, ..., -79.0399  , -79.010056,
              -78.98011 ],
             [-74.61875 , -74.66278 , -74.7068  , ..., -87.18079 , -87.18534 ,
              -87.189186],
             [-74.62613 , -74.67018 , -74.714226, ..., -87.2202  , -87.22481 ,
              -87.22871 ],
             ...,
             [-72.571815, -72.61078 , -72.64973 , ..., -81.49936 , -81.50162 ,
              -81.50365 ],
             [-72.59205 , -72.631065, -72.67005 , ..., -81.53902 , -81.541275,
              -81.543304],
             [-72.61221 , -72.65127 , -72.6903  , ..., -81.57867 , -81.58093 ,
              -81.58296 ]], dtype=float32)
    • lon
      (along_track, cross_track)
      float32
      -93.55 -93.72 ... -91.88 -91.58
      valid_min :
      -180.0
      valid_max :
      180.0
      long_name :
      longitude
      standard_name :
      longitude
      units :
      degrees_north
      array([[ -93.54598 ,  -93.71942 ,  -93.8938  , ..., -178.54013 ,
              -178.71544 , -178.88982 ],
             [-146.32289 , -146.29167 , -146.26028 , ...,  -72.86738 ,
               -71.9612  ,  -71.05231 ],
             [-146.47615 , -146.44536 , -146.41438 , ...,  -72.96076 ,
               -72.04185 ,  -71.12012 ],
             ...,
             [-150.68478 , -150.61092 , -150.53673 , ...,  -92.15616 ,
               -91.853645,  -91.55098 ],
             [-150.80498 , -150.7313  , -150.65729 , ...,  -92.171135,
               -91.86722 ,  -91.56315 ],
             [-150.92545 , -150.85194 , -150.7781  , ...,  -92.1862  ,
               -91.88087 ,  -91.57537 ]], dtype=float32)
    • swath_blanking
      (cross_track)
      bool
      True True True ... True True True
      comment :
      Flagged in areas of the swath that are expected to have unacceptable error performance.
      array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False, False, False, False, False, False, False, False,
             False, False,  True,  True,  True,  True,  True,  True,  True,
              True,  True,  True,  True,  True,  True,  True,  True,  True,
              True])
    • encoder_fore
      (along_track, cross_track)
      float64
      -90.0 -83.72 -81.11 ... 83.72 90.0
      array([[-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             ...,
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ],
             [-90.        , -83.71727406, -81.1104209 , ...,  81.1104209 ,
               83.71727406,  90.        ]])
    • encoder_aft
      (along_track, cross_track)
      float64
      -90.0 -96.28 -98.89 ... 96.28 90.0
      array([[-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             ...,
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ],
             [-90.        , -96.28272594, -98.8895791 , ...,  98.8895791 ,
               96.28272594,  90.        ]])
    • azimuth_fore
      (along_track, cross_track)
      float64
      -90.0 -83.72 ... -53.66 -47.38
      array([[ -89.99999154,  -83.7172656 ,  -81.11041244, ...,   81.11042935,
                83.71728252,   90.00000846],
             [-174.51454965, -168.23182371, -165.62497055, ...,   -3.40412876,
                -0.79727559,    5.48545035],
             [ 160.11582892,  166.39855486,  169.00540802, ...,  -28.77375019,
               -26.16689702,  -19.88417108],
             ...,
             [ 132.3635583 ,  138.64628424,  141.25313741, ...,  -56.5260208 ,
               -53.91916764,  -47.6364417 ],
             [ 132.46575984,  138.74848578,  141.35533895, ...,  -56.42381926,
               -53.8169661 ,  -47.53424016],
             [ 132.61820778,  138.90093372,  141.50778688, ...,  -56.27137133,
               -53.66451816,  -47.38179222]])
    • azimuth_aft
      (along_track, cross_track)
      float64
      -90.0 -96.28 ... -41.1 -47.38
      array([[ -89.99999154,  -96.28271748,  -98.88957065, ...,   98.88958756,
                96.2827344 ,   90.00000846],
             [-174.51454965,  179.20272441,  176.59587124, ...,   14.37502945,
                11.76817629,    5.48545035],
             [ 160.11582892,  153.83310298,  151.22624981, ...,  -10.99459198,
               -13.60144514,  -19.88417108],
             ...,
             [ 132.3635583 ,  126.08083236,  123.4739792 , ...,  -38.74686259,
               -41.35371576,  -47.6364417 ],
             [ 132.46575984,  126.1830339 ,  123.57618074, ...,  -38.64466105,
               -41.25151422,  -47.53424016],
             [ 132.61820778,  126.33548184,  123.72862867, ...,  -38.49221312,
               -41.09906628,  -47.38179222]])
    • bearing
      (along_track)
      float64
      8.459e-06 -84.51 ... -137.5 -137.4
      array([ 8.45933756e-06, -8.45145497e+01, -1.09884171e+02, ...,
             -1.37636442e+02, -1.37534240e+02, -1.37381792e+02])
    • vr_std_fore
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[       nan,        nan,        nan, ...,        nan,        nan,
                     nan],
             [0.16044107, 0.1770965 , 0.15973734, ...,        nan,        nan,
                     nan],
             [0.14599795, 0.1377798 , 0.11045571, ...,        nan,        nan,
                     nan],
             ...,
             [0.15012832, 0.13452663, 0.12554988, ...,        nan,        nan,
                     nan],
             [0.18192297, 0.14888107, 0.14498303, ...,        nan,        nan,
                     nan],
             [0.23509887, 0.17990748, 0.1688941 , ...,        nan,        nan,
                     nan]])
    • vr_std_aft
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[       nan,        nan,        nan, ...,        nan,        nan,
                     nan],
             [0.16044107, 0.13365569, 0.11528918, ...,        nan,        nan,
                     nan],
             [0.14599795, 0.1409856 , 0.12281823, ...,        nan,        nan,
                     nan],
             ...,
             [0.15012832, 0.16636848, 0.16302567, ...,        nan,        nan,
                     nan],
             [0.18192297, 0.2051821 , 0.23040868, ...,        nan,        nan,
                     nan],
             [0.23509887, 0.28322509, 0.30515516, ...,        nan,        nan,
                     nan]])
    • vx_std
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[            nan,             nan,             nan, ...,
                          nan,             nan,             nan],
             [ 1.85276221e+15, -1.01371753e+00, -6.37402410e-01, ...,
                          nan,             nan,             nan],
             [ 1.68597407e+15, -9.00674339e-01, -5.34460348e-01, ...,
                          nan,             nan,             nan],
             ...,
             [ 1.73367131e+15, -9.77537843e-01, -6.65781000e-01, ...,
                          nan,             nan,             nan],
             [ 2.10083375e+15, -1.15825280e+00, -8.80822695e-01, ...,
                          nan,             nan,             nan],
             [ 2.71490531e+15, -1.53303442e+00, -1.12850161e+00, ...,
                          nan,             nan,             nan]])
    • vy_std
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.11344897, -0.11160612, -0.09969578, ...,         nan,
                      nan,         nan],
             [-0.10323614, -0.09916053, -0.08359467, ...,         nan,
                      nan,         nan],
             ...,
             [-0.10615675, -0.10762288, -0.10413446, ...,         nan,
                      nan,         nan],
             [-0.12863897, -0.12751885, -0.13776903, ...,         nan,
                      nan,         nan],
             [-0.16624001, -0.16878076, -0.17650836, ...,         nan,
                      nan,         nan]])
    • u_std
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[           nan,            nan,            nan, ...,
                         nan,            nan,            nan],
             [1.84427750e+15, 1.00913161e+00, 6.34554999e-01, ...,
                         nan,            nan,            nan],
             [1.58545989e+15, 8.47649274e-01, 5.03400529e-01, ...,
                         nan,            nan,            nan],
             ...,
             [1.16820420e+15, 6.63479533e-01, 4.55175344e-01, ...,
                         nan,            nan,            nan],
             [1.41837683e+15, 7.87631329e-01, 6.03308536e-01, ...,
                         nan,            nan,            nan],
             [1.83828915e+15, 1.04543686e+00, 7.75080606e-01, ...,
                         nan,            nan,            nan]])
    • v_std
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[           nan,            nan,            nan, ...,
                         nan,            nan,            nan],
             [1.77111060e+14, 1.47419613e-01, 1.16451857e-01, ...,
                         nan,            nan,            nan],
             [5.73433109e+14, 3.20215215e-01, 1.98050093e-01, ...,
                         nan,            nan,            nan],
             ...,
             [1.28098210e+15, 7.25918611e-01, 4.96914211e-01, ...,
                         nan,            nan,            nan],
             [1.54974502e+15, 8.58747632e-01, 6.56389925e-01, ...,
                         nan,            nan,            nan],
             [1.99784981e+15, 1.13390618e+00, 8.39000088e-01, ...,
                         nan,            nan,            nan]])
    • u_error
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[            nan,             nan,             nan, ...,
                          nan,             nan,             nan],
             [ 2.52446743e+15,  1.57985756e+00,  2.73321683e-01, ...,
                          nan,             nan,             nan],
             [-2.12833063e+15,  7.25213956e-01,  5.51193062e-01, ...,
                          nan,             nan,             nan],
             ...,
             [-2.94914348e+15,  8.90002518e-01,  8.14141140e-02, ...,
                          nan,             nan,             nan],
             [-3.69984513e+14, -3.33645828e-01, -2.41816234e-02, ...,
                          nan,             nan,             nan],
             [ 1.12685527e+15, -1.76695390e+00,  9.25547615e-02, ...,
                          nan,             nan,             nan]])
    • v_error
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[            nan,             nan,             nan, ...,
                          nan,             nan,             nan],
             [-2.68299979e+14, -3.79151176e-03,  4.61113074e-02, ...,
                          nan,             nan,             nan],
             [-7.50480499e+14,  2.31701511e-01,  3.85226655e-01, ...,
                          nan,             nan,             nan],
             ...,
             [ 2.15998239e+14,  2.55256416e-01, -2.02790215e-01, ...,
                          nan,             nan,             nan],
             [ 1.78720405e+15,  9.52164264e-01,  4.66458194e-01, ...,
                          nan,             nan,             nan],
             [ 2.95463479e+15,  1.80841103e+00, -8.95085077e-01, ...,
                          nan,             nan,             nan]])
    • u_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.03523015, -0.02987939, -0.03170495, ...,         nan,
                      nan,         nan],
             [-0.04159169, -0.03681102, -0.02187912, ...,         nan,
                      nan,         nan],
             ...,
             [-0.04754529, -0.04517919, -0.04437858, ...,         nan,
                      nan,         nan],
             [-0.04602465, -0.04401393, -0.04261617, ...,         nan,
                      nan,         nan],
             [-0.04780817, -0.04410614, -0.04020062, ...,         nan,
                      nan,         nan]])
    • v_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.05411968, -0.04791556, -0.06289133, ...,         nan,
                      nan,         nan],
             [-0.05843863, -0.05061334, -0.05056934, ...,         nan,
                      nan,         nan],
             ...,
             [ 0.00629517,  0.01516091,  0.01741814, ...,         nan,
                      nan,         nan],
             [-0.00156342,  0.00140182,  0.00144315, ...,         nan,
                      nan,         nan],
             [-0.01554612, -0.01303515, -0.01519734, ...,         nan,
                      nan,         nan]])
    • u10_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-5.38334258, -5.82154275, -6.3913937 , ...,         nan,
                      nan,         nan],
             [-5.44924812, -5.70297936, -6.69049058, ...,         nan,
                      nan,         nan],
             ...,
             [-4.81310097, -5.09853933, -5.35307917, ...,         nan,
                      nan,         nan],
             [-4.96165531, -5.33056952, -5.52085103, ...,         nan,
                      nan,         nan],
             [-5.07297533, -5.44919237, -5.48640689, ...,         nan,
                      nan,         nan]])
    • v10_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-1.08650637, -1.68237726, -1.72872984, ...,         nan,
                      nan,         nan],
             [-1.08357527, -1.87951013, -1.50716619, ...,         nan,
                      nan,         nan],
             ...,
             [-2.89849666, -3.14834943, -3.39174935, ...,         nan,
                      nan,         nan],
             [-2.16749033, -2.35594816, -2.24621956, ...,         nan,
                      nan,         nan],
             [-1.29365641, -1.34759014, -1.54083478, ...,         nan,
                      nan,         nan]])
    • tx_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.04039725, -0.04820274, -0.05782303, ...,         nan,
                      nan,         nan],
             [-0.04136869, -0.046792  , -0.06269642, ...,         nan,
                      nan,         nan],
             ...,
             [-0.03695056, -0.04174596, -0.04635272, ...,         nan,
                      nan,         nan],
             [-0.03670769, -0.04244927, -0.04496274, ...,         nan,
                      nan,         nan],
             [-0.03628977, -0.04179575, -0.04272079, ...,         nan,
                      nan,         nan]])
    • ty_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[        nan,         nan,         nan, ...,         nan,
                      nan,         nan],
             [-0.00815327, -0.01393019, -0.01563984, ...,         nan,
                      nan,         nan],
             [-0.00822611, -0.01542107, -0.01412362, ...,         nan,
                      nan,         nan],
             ...,
             [-0.02225199, -0.02577814, -0.02936942, ...,         nan,
                      nan,         nan],
             [-0.01603569, -0.01876128, -0.01829359, ...,         nan,
                      nan,         nan],
             [-0.00925423, -0.01033613, -0.01199796, ...,         nan,
                      nan,         nan]])
    • wind_speed_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[       nan,        nan,        nan, ...,        nan,        nan,
                     nan],
             [5.49189161, 6.05976511, 6.62105885, ...,        nan,        nan,
                     nan],
             [5.55593741, 6.00470914, 6.85814946, ...,        nan,        nan,
                     nan],
             ...,
             [5.61847166, 5.9922623 , 6.33714607, ...,        nan,        nan,
                     nan],
             [5.41442867, 5.82798963, 5.96031026, ...,        nan,        nan,
                     nan],
             [5.23532478, 5.61334986, 5.69866935, ...,        nan,        nan,
                     nan]])
    • wind_dir_model
      (along_track, cross_track)
      float64
      nan nan nan nan ... nan nan nan nan
      array([[          nan,           nan,           nan, ...,           nan,
                        nan,           nan],
             [-101.41057573, -106.11885244, -105.13508567, ...,           nan,
                        nan,           nan],
             [-101.24648449, -108.24048113, -102.69510199, ...,           nan,
                        nan,           nan],
             ...,
             [-121.05676372, -121.6953415 , -122.35864022, ...,           nan,
                        nan,           nan],
             [-113.5980259 , -113.84395791, -112.13949574, ...,           nan,
                        nan,           nan],
             [-104.30605773, -103.89060078, -105.68717856, ...,           nan,
                        nan,           nan]])
    • along_track
      PandasIndex
      PandasIndex(Int64Index([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,
                  ...
                  8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, 8705],
                 dtype='int64', name='along_track', length=8706))
    • cross_track
      PandasIndex
      PandasIndex(Int64Index([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
                  ...
                  324, 325, 326, 327, 328, 329, 330, 331, 332, 333],
                 dtype='int64', name='cross_track', length=334))
  • title :
    Odysea Simple Orbit Sampling V0.1
    project :
    Odysea
    summary :
    Simplified orbit sampling assuming basic Odysea orbital parameters and viewing geometry. These data have been generated using only knowledge of along/cross track viewing geometry. No radar timing or antenna rotation was used.
    references :
    Rodriguez 2018, Wineteer 2020
    institution :
    Jet Propulsion Laboratory (JPL)
    creator_name :
    Alexander Wineteer
    version_id :
    0.1
    date_created :
    2022-12-22 17:38:25.632790
    geospatial_lat_min :
    -89.99N
    geospatial_lat_max :
    89.99N
    geospatial_lon_min :
    -180.00E
    geospatial_lon_max :
    180.00E
    time_coverage_start :
    2020-01-23 03:02:59.999735
    time_coverage_end :
    2020-01-23 04:37:58.873391

Show the geographic u/v surface current uncertainties.¶

In [23]:
o.u_error.T.plot(figsize=(20,2),vmax=.5)
o.v_error.T.plot(figsize=(20,2),vmax=.5)
Out[23]:
<matplotlib.collections.QuadMesh at 0x7f34445bae90>